cmdex = '(?P<cmd>.*)'
procre = re.compile('^\s*' + pidex + '\s*' + pythonex + '\s*' + cmdex + '$')
xendre = re.compile('^/usr/sbin/xend\s*(start|restart)\s*.*$')
- procs = util.popen('ps -e -o pid,args 2>/dev/null')
+ procs = util.popen('ps -e -o pid,args')
for proc in procs:
pm = procre.match(proc)
if not pm: continue
return 0
# Read the pid of the previous invocation and search active process list.
pid = open(PID_FILE, 'r').read()
- lines = util.popen('ps ' + pid + ' 2>/dev/null').readlines()
+ lines = util.popen('ps ' + pid).readlines()
for line in lines:
if re.search('^ *' + pid + '.+xensv', line):
if not kill:
returns interface address as a string
"""
- fd = util.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
+ fd = util.popen( '/sbin/ifconfig ' + dev )
lines = _readlines(fd)
for line in lines:
m = re.search( '^\s+inet addr:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',
returns interface netmask as a string
"""
- fd = util.popen( '/sbin/ifconfig ' + dev + ' 2>/dev/null' )
+ fd = util.popen( '/sbin/ifconfig ' + dev )
lines = _readlines(fd)
for line in lines:
m = re.search( '^.+Mask:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*',
cmdex = '(?P<cmd>.*)'
procre = re.compile('^\s*' + pidex + '\s*' + pythonex + '\s*' + cmdex + '$')
xendre = re.compile('^/usr/sbin/xend\s*(start|restart)\s*.*$')
- procs = util.popen('ps -e -o pid,args 2>/dev/null')
+ procs = util.popen('ps -e -o pid,args')
for proc in procs:
pm = procre.match(proc)
if not pm: continue
"""
running = 0
if pid:
- lines = util.popen('ps %d 2>/dev/null' % pid).readlines()
+ lines = util.popen('ps %d' % pid).readlines()
exp = '^ *%d.+%s' % (pid, name)
for line in lines:
if re.search(exp, line):
from twisted.internet import utils
from twisted.internet import reactor
+from twisted.internet import protocol
from XendLogging import log
from StringIO import StringIO
+import os
+
# This is rather distasteful. Twisted doesn't play nicely with Python's
# standard os.popen, so here's an implementation of a synchronous popen that
# should work reliably. - MAW
done_flag = False
result = ''
-
- def done(output):
- global done_flag, result
- done_flag = True
- result = output
-
- def err(output):
- global done_flag
-# For normal use, suppress debug output here. It grumbles about stderr if the
-# program exits with $? != 0, even if stderr is redirected. Grrr!
-# log.debug("util.popen(\'%s\'): %s" % (cmd, output))
- done_flag = True
-
- d = utils.getProcessOutput(cmd)
- d.addCallbacks(done, err)
+ class PopenProtocol(protocol.ProcessProtocol):
+ def connectionMade(self):
+ self.transport.closeStdin() # we don't want stdin
+ def outReceived(self, data):
+ global result
+ result = result + data
+# def errReceived(self, errdata):
+# log.debug("popen: %s" % errdata)
+ def processEnded(self,status_obj):
+ code = status_obj.value.exitCode
+ if code:
+ # todo: Should consider throwing an exception here.
+ log.debug("popen: process exit with code %d" % code)
+ global done_flag
+ done_flag = True
+
+ # using cmd.split is quick and dirty. OK as long as people don't try anything
+ # tricky with quotes, etc.
+ args = cmd.split(' ')
+ reactor.spawnProcess(PopenProtocol(), args[0], args, os.environ)
+
+ # Ick! Sit and ask the reactor to do IO, until the process finishes.
+ # Can't just do "pass" here because then the reactor won't run at all :-(
while not done_flag:
reactor.iterate()